결정트리 모델 시각화하기 (Graphviz)

1 minute read

Graphviz 패키지는 그래프 기반의 dot 파일로 기술된 다양한 이미지를 쉽게 시각화할 수 있는 패키지이다. 이를 이용해 결정트리 알고리즘이 어떤 규칙을 가지고 트리를 생성하는지를 시각적으로 쉽게 확인할 수 있다.

1. 윈도우에 Graphviz 설치하기

https://graphviz.org/download/에서 “Stable Windows install packages”를 찾아 설치한다. 2020-09-27 기준으로, https://www2.graphviz.org/Packages/stable/windows/10/cmake/Release/x64/에 들어가 graphviz-install-2.44.1-win64.exe를 설치했다.

2. Graphviz 파이썬 래퍼(Wrapper) 모듈 설치하기

Anaconda Prompt를 관리자 권한으로 실행해 conda install python-graphviz 명령어를 입력한다.

Anaconda Cloud에 나온 것처럼 conda install -c anaconda graphviz로 설치를 했더니 이후 import graphviz에서 에러가 발생해 위의 명령어로 다시 수행했다.

3. 환경변수 설정하기

환경변수에 Graphviz와 관련된 PATH를 추가해줘야 한다. 환경변수 설정에 접근하는 방법은 다음과 같다.

  • 파일탐색기 -> 좌측 내 PC 우클릭 -> 속성 -> 좌측 고급 시스템 설정 -> 환경변수

환경변수 접근하면 사용자 변수와 시스템 변수가 있을 것이다. 여기서는 Graphviz가 C:\Program Files\Graphviz 2.44.1에 설치되어 있으므로 사용자 변수에서는 ~\bin을 추가해줄 것이고, 시스템 변수에서는 \bin\dot.exe를 추가해줄 것이다.

  • 사용자 변수 : Path -> 편집 -> 새로 만들기(N) -> C:\Program Files\Graphviz 2.44.1\bin
  • 시스템 변수 : Path -> 편집 -> 새로 만들기(N) -> C:\Program Files\Graphviz 2.44.1\bin\dot.exe

이렇게 1, 2번 과정에서 설치했던 Graphviz와 파이썬 래퍼가 연결되었다. Graphviz를 Jupyter Notebook에서 사용하기 전에 마지막으로 Jupyter Notebook 서버 프로그램을 껐다가 다시 켠다.

4. Graphviz 사용해보기

Graphviz가 어떻게 결정트리 모델을 시각화할 수 있는지 직접 확인해보자. 데이터는 iris 데이터를 사용했다.

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import warnings
warnings.filterwarnings('ignore')

dt_clf = DecisionTreeClassifier()

iris_data = load_iris()
X_train , X_test , y_train , y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2)

dt_clf.fit(X_train , y_train)

이렇게 학습이 완료된 Classifier를 이용해 학습된 결정트리 규칙을 실제 트리 형태로 시각화해보자.

사이킷런은 Graphviz 패키지와 쉽게 인터페이스 할 수 있도록 Graphviz가 읽어 들여 그래프 형태로 시각화할 수 있게 하는 export_graphviz() API를 제공한다.export_graphviz() 함수 인자로는 학습이 완료된 Estimator(dt_clf), 생성할 파일 이름, 레이블 이름 리스트, 피처 이름 리스트를 입력할 것이다.

from sklearn.tree import export_graphviz

# tree.dot 파일 생성
export_graphviz(dt_clf, out_file="tree.dot", class_names=iris_data.target_names, feature_names=iris_data.feature_names, impurity=True, filled=True)

이제 Graphviz 파이썬 래퍼 모듈을 호출해 결정 트리 규칙을 시각화해보자.

import graphviz

# tree.dot 파일을 Graphviz로 읽어 Jupyter Notebook에서 시각화 
with open("tree.dot") as f:
    dot_graph = f.read()
src = graphviz.Source(dot_graph)
src

image

시각화가 잘 된 것을 확인할 수 있다. .view()를 써서 이 결과를 pdf 파일로 내보내는 것도 가능하다. .view()의 인자를 따로 설정하지 않으면, default로 Source.gv 파일과 Source.gv.pdf라는 이름의 파일이 생성된다.

src.view()

Leave a comment